# 适配器模式
# => ⭐让原本由于接口不兼容而不能一起工作的类可以协同工作。
# 适配器模式结构中包含如下角色：
# 1. Target（目标接口）：定义客户端所需接口。
# 2. Adaptee（被适配对象）：定义一个已经存在的接口，这个接口需要适配。
# 3. Adapter（适配器）：实现了Target接口，并持有Adaptee的实例，在适配器的方法中，可以调用Adaptee的方法，使得客户端可以透明地使用Adaptee。
# 4. Client（客户端）：使用Target接口与Adaptee对象进行交互。


from abc import ABCMeta, abstractmethod

class Target(metaclass=ABCMeta):
    @abstractmethod
    def request(self):
        pass
class Adaptee:
    def specific_request(self):
        return "specific request"

class Adapter(Target):
    def __init__(self, adaptee):
        self.adaptee = adaptee
    def request(self):
        return self.adaptee.specific_request()

if __name__ == "__main__":
    adaptee = Adaptee()
    adapter = Adapter(adaptee)
    print(adapter.request())     # Output: specific request